// api 后端服务的单点入口文件 src/main.tsx  
const Koa = require("koa");  // http server
const router = require('koa-router')(); // koa 路由中间件 BrowserRouter
const app = new Koa();
// const crossDoman = require('./middleware/cross-domain') // 跨域中间件 支持跨域
const cors = require('koa-cors')
const {
    fetchSuggest,
    fetchHotword,
    fetchSearchData
} = require('./api')
// 模块化分离
const partitionData = require('./data/partitions')


// 只允许以GET方式请求
router.get('/getVideos',ctx => {
    const videos = [{
        id: 1,
        name: '死缓就是缓一缓再死吗？为什么要有死缓？',
        pic: 'https://www.bilibili.com/video/BV1nt4y1p78J?spm_id_from=333.851.b_7265636f6d6d656e64.1'
    }, {
        id: 2,
        name: '死缓就是缓一缓再死吗？为什么要有死缓？',
        pic: 'https://www.bilibili.com/video/BV1nt4y1p78J?spm_id_from=333.851.b_7265636f6d6d656e64.1'
    }, {
        id: 3,
        name: '死缓就是缓一缓再死吗？为什么要有死缓？',
        pic: 'https://www.bilibili.com/video/BV1nt4y1p78J?spm_id_from=333.851.b_7265636f6d6d656e64.1'
    }]
    ctx.body = videos
})

router.get('/banners',ctx => {
    const banners = [{

    }]
    ctx.body = banners
})

// 添加了一个路由中间件  
// ctx 上下文对象 = req + res
router.get("/search/suggest", async (ctx, next) => {
    // ctx.query 请求对象的查询参数  
    // ?a=1&b=2 查询参数 设置成对象返回{a:1,b:2} 
    const w = encodeURI(ctx.query.w);  // 对url编码
    // ctx.body = w
    console.log(w, '------------')
    try{
        const data = await fetchSuggest(w);
        // console.log(data);
        // api 前后端交互的数据格式是JSON
        let resData = {
            code: "1",  // 成功响应 200
            msg: "success"  // 成功 | 失败原因
        }
        if (data.code === 0) {  // 
            resData.data = data.result;
        } else {
            resData.code = "0";
            resData.msg = "fail";
        }
        // ctx.set('content-type', 'json');
        ctx.body = resData
    } catch(e) {
        next(e)
    } 
})
// 接口服务
router.get("/search/hotword",async (ctx,next) => {
    try{
        const data = await fetchHotword();  //rpc 调用
        let resData = {
            code: "1",  // 成功响应 200
            msg: "success"  // 成功 | 失败原因
        }
        if (data.code === 0) {  
            resData.data = data.list;
        } else {
            resData.code = "0";
            resData.msg = "fail";
        }
        ctx.body = resData
    } catch(e) {
        next(e)
    }
})

// 搜索结果列表
router.get("/search/all",async (ctx,next) => {
    const w = encodeURI(ctx.query.keyword);  
    try{
        const data = await fetchSearchData(w); 
        let resData = {
            code: "1",  // 成功响应 200
            msg: "success"  // 成功 | 失败原因
        }
        if (data.code === 0) {  // 
            resData.data = data.data;
        } else {
            resData.code = "0";
            resData.msg = "fail";
        }
        ctx.body = resData
    }catch(e) {
        next(e)
    }
})

// 分区
router.get("/partitions",async (ctx,next) => {
   ctx.body=partitionData;
})

app.use(cors())
// app.use(crossDoman);
app.use(router.routes());
// ctx = req 用户请求 +中间件{n} + res 响应结果
// 中间件函数  
app.use((ctx) => {
    ctx.body = 'hello world'
})

app.listen(3300);